import Vue from 'vue'
var _Caiyuanzi = require('./data.js');
const url_prefix = _Caiyuanzi.http_url_prefix;
const this_app_id = _Caiyuanzi.caiyuanzi_app_id;
const this_daili_id = _Caiyuanzi.caiyuanzi_daili_id;
// 文件上传封装
// filePath:文件路径，fileType：上传文件类型（image/video/audio）仅支付宝小程序，且必填。，fileName：后台收受对象名称
function uploadSigleFilePost(url, filePath, fileType, fileName, data, succ, error) {
	const baseParam = {
		utoken: getApp({
			allowDefault: true
		}).globalData.token
	}
	uni.uploadFile({
		url: url_prefix + url,
		filePath: filePath + "",
		fileType: fileType,
		name: fileName,
		formData: Object.assign(data, baseParam),
		success: (res) => {
			var code = res.data.code;
			if (res.data.code == undefined) {
				var data = JSON.parse(res.data);
				code = data.code;
			}

			if (code == undefined) {
				var data = JSON.parse(res.data.replace("\\", ''));
				uni.showToast({
					icon: 'none',
					title: "服务器异常，请稍后重试",
					position: "bottom"
				});
				return;
			}
			if (code == '101') {
				login();
			} else {
				if (succ) {
					succ(JSON.parse(res.data));
				}
			}
		},
		fail: (err) => {
			uni.showToast({
				icon: 'none',
				title: "网络异常，请稍后重试",
				position: "bottom"
			});
			if (error) {
				error();
			}
		}
	});
}

//进入页面执行login方法
function login() {
	var code = getUrlCode().code;
	if (code == null || !code) {
		//如果没有code 去获取code
		requestPost('user/getCodeUrl', {}, (res) => {
			if (res.code == 1) {
				let url = res.data.list;
				window.location.href = url;
			} else {
				console.log(res);
			}
		}, (err) => {
			console.log(err);
		}, {
			isShowLoading: false
		});

	} else {
		requestPost('user/login', {
			code: code
		}, (res) => {
			if (res.code == 1) {
				uni.setStorageSync('utoken', '');
				uni.setStorageSync('utoken', res.data.list);
				setTimeout(() => {
					uni.navigateTo({
						url: '/pages/index/index',
						fail(err) {
							console.log(err);
						}
					})
				}, 600);
			} else {
				console.log(res);
			}
		}, (err) => {
			console.log(err);
		}, {
			isShowLoading: false
		});
	}
}

//截取code
function getUrlCode() {
	// 截取url中的code方法
	var url = location.search
	var theRequest = new Object()
	if (url.indexOf("?") != -1) {
		var str = url.substr(1)
		var strs = str.split("&");
		for (var i = 0; i < strs.length; i++) {
			theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1])
		}
	}
	console.log(theRequest)
	return theRequest
}


// post 请求封装
function requestPost(url, data, succ, error, options) {
	options = options || {};
	const baseParam = {
		utoken: uni.getStorageSync("utoken"),
		// utoken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIiLCJhdWQiOiIiLCJpYXQiOjE3NDU3MjIyMTUsIm5iZiI6MTc0NTcyMjIxNSwiZXhwIjoxNzQ5MzIyMjE1LCJkYXRhIjp7InNlc3Npb25faWQiOiJwaWw4NnRyNGR1c2ozOGdhY244b2dtNTVldCIsInVzZXJuYW1lIjoiXHU3MDc1XHU3MjgwIn19.xYigI54TcKyP1U0KrQ4EqiW2gJIW6aG6V7yQlkUzi6M'
	}
	if (options.isShowLoading !== false) uni.showLoading({
		title: '加载中'
	});
	uni.request({
		url: url_prefix + url,
		method: 'POST',
		data: Object.assign(data, baseParam),
		header: {
			'content-type': 'application/x-www-form-urlencoded'
		},
		success: res => {
			var code = res.data.code;
			if (res.data.code == undefined) {
				var data = JSON.parse(res.data);
				code = data.code;
			}
			if (code == '101') {
				console.log('未登录');
				login();
			} else {
				if (succ) {
					succ(res.data);
				}
			}
		},
		fail: (err) => {
			uni.showToast({
				icon: 'none',
				title: "网络异常，请稍后重试",
				position: "bottom"
			});
			console.log(err);
			if (error) {
				error();
			}
		},
		complete() {
			if (options.isShowLoading !== false) uni.hideLoading();
		}
	});
}

function showLoading(text) {
	uni.showLoading({
		title: text,
		mask: true
	});
}

//校验数值
function validate_number(val) {
	var reg = new RegExp("^(-?\\d+)(\\.\\d{1,2})?$");
	var flag = reg.test(val);
	return flag;
}
//校验邮箱格式
function checkEmail(email) {
	return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(
		email);
}
//校验身份号
function checkIdcard(idcard) {
	return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(
		email);
}
//校验整数
function validate_int(val) {
	var reg = new RegExp("^-?\\d+$");
	var flag = reg.test(val);
	return flag;
}

// 产生一个随机数 
function getUid() {
	return Math.floor(Math.random() * 100000000 + 10000000).toString();
}

// 底部吐司消息
function toast(text) {
	uni.showToast({
		icon: 'none',
		title: text,
		position: "bottom"
	});
}
// 播放语音
function playAudio(src) {
	var audio = plus.audio.createPlayer(src);
	audio.play(function() {
		audio.stop();
		// console.log( "Audio play success!" ); 
	}, function(e) {
		console.log("Audio play error: " + e.message);
	});
	// const innerAudioContext = uni.createInnerAudioContext();
	// innerAudioContext.autoplay = true;
	// innerAudioContext.src = src;
	// innerAudioContext.onPlay(() => {
	//   // console.log('开始播放');
	// });
	// innerAudioContext.onError((res) => {
	//   console.log(res.errMsg);
	//   console.log(res.errCode);
	// });
}

// 获取0到1之间的随机小数,num:几位随机小数
function randomDouble(num) {
	var random = Math.random();
	while (random == 0 || random < 0.01 || random == 1) {
		random = Math.random();
	}
	return random.toFixed(num);
}

function formatTime(time) {
	if (typeof time !== 'number' || time < 0) {
		return time
	}

	var hour = parseInt(time / 3600)
	time = time % 3600
	var minute = parseInt(time / 60)
	time = time % 60
	var second = time

	return ([hour, minute, second]).map(function(n) {
		n = n.toString()
		return n[1] ? n : '0' + n
	}).join(':')
}

function formatLocation(longitude, latitude) {
	if (typeof longitude === 'string' && typeof latitude === 'string') {
		longitude = parseFloat(longitude)
		latitude = parseFloat(latitude)
	}

	longitude = longitude.toFixed(2)
	latitude = latitude.toFixed(2)

	return {
		longitude: longitude.toString().split('.'),
		latitude: latitude.toString().split('.')
	}
}

var dateUtils = {
	UNITS: {
		'年': 31557600000,
		'月': 2629800000,
		'天': 86400000,
		'小时': 3600000,
		'分钟': 60000,
		'秒': 1000
	},
	humanize: function(milliseconds) {
		var humanize = '';
		for (var key in this.UNITS) {
			if (milliseconds >= this.UNITS[key]) {
				humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
				break;
			}
		}
		return humanize || '刚刚';
	},
	format: function(dateStr) {
		var date = this.parse(dateStr)
		var diff = Date.now() - date.getTime();
		if (diff < this.UNITS['天']) {
			return this.humanize(diff);
		}
		var _format = function(number) {
			return (number < 10 ? ('0' + number) : number);
		};
		return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +
			_format(date.getHours()) + ':' + _format(date.getMinutes());
	},
	parse: function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
		var a = str.split(/[^0-9]/);
		return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
	}
};

var validateUtil = {
	provinceAndCitys: {
		11: "北京",
		12: "天津",
		13: "河北",
		14: "山西",
		15: "内蒙古",
		21: "辽宁",
		22: "吉林",
		23: "黑龙江",
		31: "上海",
		32: "江苏",
		33: "浙江",
		34: "安徽",
		35: "福建",
		36: "江西",
		37: "山东",
		41: "河南",
		42: "湖北",
		43: "湖南",
		44: "广东",
		45: "广西",
		46: "海南",
		50: "重庆",
		51: "四川",
		52: "贵州",
		53: "云南",
		54: "西藏",
		61: "陕西",
		62: "甘肃",
		63: "青海",
		64: "宁夏",
		65: "新疆",
		71: "台湾",
		81: "香港",
		82: "澳门",
		91: "国外"
	},

	powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],

	parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],

	genders: {
		male: "男",
		female: "女"
	},

	checkAddressCode: function(addressCode) {
		var check = /^[1-9]\d{5}$/.test(addressCode);
		if (!check) return false;
		if (validateUtil.provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
			return true;
		} else {
			return false;
		}
	},

	checkBirthDayCode: function(birDayCode) {
		var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
		if (!check) return false;
		var yyyy = parseInt(birDayCode.substring(0, 4), 10);
		var mm = parseInt(birDayCode.substring(4, 6), 10);
		var dd = parseInt(birDayCode.substring(6), 10);
		var xdata = new Date(yyyy, mm - 1, dd);
		if (xdata > new Date()) {
			return false; //生日不能大于当前日期
		} else if ((xdata.getFullYear() == yyyy) && (xdata.getMonth() == mm - 1) && (xdata.getDate() == dd)) {
			return true;
		} else {
			return false;
		}
	},

	getParityBit: function(idCardNo) {
		var id17 = idCardNo.substring(0, 17);
		var power = 0;
		for (var i = 0; i < 17; i++) {
			power += parseInt(id17.charAt(i), 10) * parseInt(validateUtil.powers[i]);
		}
		var mod = power % 11;
		return validateUtil.parityBit[mod];
	},

	checkParityBit: function(idCardNo) {
		var parityBit = idCardNo.charAt(17).toUpperCase();
		if (validateUtil.getParityBit(idCardNo) == parityBit) {
			return true;
		} else {
			return false;
		}
	},

	checkIdCardNo: function(idCardNo) { // 校验身份号
		//15位和18位身份证号码的基本校验
		var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
		if (!check) return false;
		//判断长度为15位或18位
		if (idCardNo.length == 15) {
			return validateUtil.check15IdCardNo(idCardNo);
		} else if (idCardNo.length == 18) {
			return validateUtil.check18IdCardNo(idCardNo);
		} else {
			return false;
		}
	},

	//校验15位的身份证号码
	check15IdCardNo: function(idCardNo) {
		//15位身份证号码的基本校验
		var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
		if (!check) return false;
		//校验地址码
		var addressCode = idCardNo.substring(0, 6);
		check = validateUtil.checkAddressCode(addressCode);
		if (!check) return false;
		var birDayCode = '19' + idCardNo.substring(6, 12);
		//校验日期码
		return validateUtil.checkBirthDayCode(birDayCode);
	},

	//校验18位的身份证号码
	check18IdCardNo: function(idCardNo) {
		//18位身份证号码的基本格式校验
		var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/
			.test(idCardNo);
		if (!check) return false;
		//校验地址码
		var addressCode = idCardNo.substring(0, 6);
		check = validateUtil.checkAddressCode(addressCode);
		if (!check) return false;
		//校验日期码
		var birDayCode = idCardNo.substring(6, 14);
		check = validateUtil.checkBirthDayCode(birDayCode);
		if (!check) return false;
		//验证校检码
		return validateUtil.checkParityBit(idCardNo);
	},

	formateDateCN: function(day) {
		var yyyy = day.substring(0, 4);
		var mm = day.substring(4, 6);
		var dd = day.substring(6);
		return yyyy + '-' + mm + '-' + dd;
	},

	//获取信息
	getIdCardInfo: function(idCardNo) {
		var idCardInfo = {
			gender: "", //性别
			birthday: "" // 出生日期(yyyy-mm-dd)
		};
		if (idCardNo.length == 15) {
			var aday = '19' + idCardNo.substring(6, 12);
			idCardInfo.birthday = validateUtil.formateDateCN(aday);
			if (parseInt(idCardNo.charAt(14)) % 2 == 0) {
				idCardInfo.gender = validateUtil.genders.female;
			} else {
				idCardInfo.gender = validateUtil.genders.male;
			}
		} else if (idCardNo.length == 18) {
			var aday = idCardNo.substring(6, 14);
			idCardInfo.birthday = validateUtil.formateDateCN(aday);
			if (parseInt(idCardNo.charAt(16)) % 2 == 0) {
				idCardInfo.gender = validateUtil.genders.female;
			} else {
				idCardInfo.gender = validateUtil.genders.male;
			}
		}
		return idCardInfo;
	},

	getId15: function(idCardNo) {
		if (idCardNo.length == 15) {
			return idCardNo;
		} else if (idCardNo.length == 18) {
			return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
		} else {
			return null;
		}
	},

	getId18: function(idCardNo) {
		if (idCardNo.length == 15) {
			var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
			var parityBit = validateUtil.getParityBit(id17);
			return id17 + parityBit;
		} else if (idCardNo.length == 18) {
			return idCardNo;
		} else {
			return null;
		}
	},
	checknumber: function(number) { //验证护照是否正确
		var str = number;
		//在JavaScript中，正则表达式只能使用"/"开头和结束，不能使用双引号
		var Expression = /(P\d{7})|(G\d{8})/;
		var objExp = new RegExp(Expression);
		if (objExp.test(str) == true) {
			return true;
		} else {
			return false;
		}
	},
	stringCheck: function(value) { // 字符验证  只能包括中文字、英文字母、数字和下划线
		return /^[\u0391-\uFFE5\w]+$/.test(value);
	},
	byteRangeLength: function(value, param) { // 中文字两个字节 请确保输入的值在3-15个字节之间(一个中文字算2个字节)
		var length = value.length;
		for (var i = 0; i < value.length; i++) {
			if (value.charCodeAt(i) < 127) {
				length++;
			}
		}
		return (length >= param[0] && length <= param[1]);
	},
	passport: function(value) { //护照编号验证 请正确输入您的护照编号
		return validateUtil.checknumber(value);
	},
	isMobile: function(value) { // 手机号码验证
		var length = value.length;
		//var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
		var mobile = /^(((1[0-9]{1})|(1[0-9]{1}))+\d{9})$/;
		return length == 11 && mobile.test(value);
	},
	isTel: function(value) { // 电话号码验证
		var tel = /^\d{3,4}-?\d{7,9}$/; //电话号码格式010-12345678
		return tel.test(value);
	},
	isPhone: function(value) { // 联系电话(手机/电话皆可)验证
		var length = value.length;
		//var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
		var mobile = /^(((1[0-9]{1})|(1[0-9]{1}))+\d{9})$/;
		var tel = /^\d{3,4}-?\d{7,9}$/;
		return tel.test(value) || mobile.test(value);
	},
	isZipCode: function(value) { // 邮政编码验证
		var tel = /^[0-9]{6}$/;
		return tel.test(value);
	}
};

module.exports = {
	formatTime: formatTime,
	formatLocation: formatLocation,
	dateUtils: dateUtils,
	requestPost: requestPost,
	validate_number: validate_number,
	toast: toast,
	validate_int: validate_int,
	randomDouble: randomDouble,
	checkEmail: checkEmail,
	uploadSigleFilePost: uploadSigleFilePost,
	playAudio: playAudio,
	showLoading: showLoading,
	validateUtil: validateUtil,
	getUid: getUid
}
